function [h] = mobile_euklides2hilbert(x,y,m,s)
    % x,y - pozycja
    % m - stopien krzywej
    % s - stan początkowy krzywej - 0-7

    % tablica e2h(stan, 2x+y, :)
    % - (:,:,1) - nastepny stan
    % - (:,:,2) - poz. hilberta  

    e2h(1,:,:) = [1 0; 0 1; 7 3; 0 2];
    e2h(2,:,:) = [0 0; 6 3; 1 1; 1 2];
    e2h(3,:,:) = [2 1; 3 0; 2 2; 5 3];
    e2h(4,:,:) = [4 3; 2 0; 3 2; 3 1];
    e2h(5,:,:) = [3 3; 4 2; 5 0; 4 1];
    e2h(6,:,:) = [5 1; 5 2; 4 0; 2 3];
    e2h(7,:,:) = [6 2; 1 3; 6 1; 7 0];
    e2h(8,:,:) = [7 2; 7 1; 0 3; 6 0];

    th = zeros(m,1); % pozycja hilberta w zapisie czworkowym
    tx = convert(x); % pozycja x w zapisie binarnym
    ty = convert(y); % pozycja y w zapisie binarnym

    %s = 0; % stan kawalka krzywej
    l = m; % poziom

    while(l>0);
        th(l) = e2h(s+1,tx(l)*2+ty(l)+1,2);
        s     = e2h(s+1,tx(l)*2+ty(l)+1,1);
        l = l-1;
    end
    
    % pozostaje dokonac konwersji s4->s10
    h = 0;
    for i=m:-1:1;
        h = h*4+th(i);
    end
    
    function [r] = convert(d)
        r = zeros(m,1);
        for j=1:m;
            r(j) = mod(d,2);
            d = floor(d/2);
        end
    end
end